package com.mall.domain.po;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.time.LocalDateTime;

/**
 * 角色信息表 实体类
 * 对应数据库表：role
 */
@Data
@TableName("role") // 指定映射的数据库表名（若类名与表名一致可省略，此处显式声明更规范）
public class Role {

    /**
     * 角色ID（主键，自增）
     * 对应表字段：role_id
     */
    @TableId(type = IdType.AUTO) // 声明为主键，且使用数据库自增策略（与表中 auto_increment 匹配）
    private Long roleId;

    /**
     * 角色名称
     * 对应表字段：role_name
     * 非空字段，需确保业务层校验非空
     */
    @TableField("role_name") // 若属性名（驼峰命名）与表字段（下划线命名）符合MP默认映射规则，可省略该注解
    private String roleName;

    /**
     * 角色权限字符串（如：admin、user）
     * 对应表字段：role_key
     * 非空字段，需确保业务层校验非空
     */
    private String roleKey;

    /**
     * 角色状态（0正常 1停用）
     * 对应表字段：status
     * 非空字段，建议配合枚举使用（如 RoleStatus 枚举），此处先保持表结构一致的 char 类型
     */
    private String status; // 注意：表字段为 char 类型，实体类用 String 接收更适配（避免字符截断问题）

    /**
     * 删除标志（0代表存在 2代表删除）
     * 对应表字段：del_flag
     * MP逻辑删除字段：需配合全局配置或注解指定逻辑删除规则
     */
    @TableLogic // 声明为MP逻辑删除字段（自动处理 "删除" 为更新 del_flag=2，查询时自动过滤 del_flag=2 的数据）
    @TableField(value = "del_flag", fill = FieldFill.INSERT) // 插入时自动填充默认值（0）
    private String delFlag;

    /**
     * 创建时间
     * 对应表字段：create_time
     * MP自动填充：插入时自动填充当前时间（无需手动set）
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     * 对应表字段：update_time
     * MP自动填充：插入和更新时自动填充当前时间（无需手动set）
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
